package com.tarena.lbs.coupon.service;

import com.tarena.lbs.base.protocol.exception.BusinessException;
import com.tarena.lbs.base.protocol.model.Result;
import com.tarena.lbs.base.protocol.pager.PageResult;
import com.tarena.lbs.common.principle.UserPrinciple;
import com.tarena.lbs.coupon.api.pojo.param.UserCouponsParam;
import com.tarena.lbs.coupon.pojo.param.CouponParam;
import com.tarena.lbs.coupon.pojo.query.UserCouponCodeQuery;
import com.tarena.lbs.coupon.pojo.param.UpdateCouponParam;
import com.tarena.lbs.coupon.pojo.query.UserCouponQuery;
import com.tarena.lbs.coupon.pojo.vo.CouponVO;
import com.tarena.lbs.coupon.pojo.vo.UserCouponsVO;
import org.springframework.web.bind.annotation.RequestBody;

public interface CouponService {

    PageResult<CouponVO> pageList(UserPrinciple userPrinciple);

    CouponVO detail(Integer id);

    /**
     * 新增优惠券接口
     *
     * @param couponParam 优惠券参数
     * @return
     * @throws BusinessException
     */
    Result<Void> addCoupon(@RequestBody CouponParam couponParam) throws BusinessException;

    /**
     * 用户领取优惠券接口
     *
     * @param param 请求信息
     * @return 领取结果
     * @throws BusinessException 业务异常
     */
    Result<Boolean> receiveCoupon(UserCouponsParam param) throws BusinessException;

    /**
     * 更新商家优惠券的接口
     *
     * @param Param 更新参数
     */
    void updateCoupon(UpdateCouponParam Param);

    UserCouponsVO receiveDetail(UserCouponCodeQuery query);

    /**
     * 平台管理员查询商家的用户领取优惠券列表
     *
     * @param couponQuery 查询参数
     * @param businessId  商家ID
     * @return 优惠券列表
     */
    PageResult<UserCouponsVO> listUserReceivedCoupons(UserCouponQuery couponQuery, Integer businessId);
}
